package net.lengwang.iot.middleware.gateway;

/**
 * 常见命令类型：
 * • PING: 表示 Ping 包。
 * • TIME_SYNC: 表示授时包。
 * • REMOTE_COMMAND: 表示远程指令。
 * • STATUS_REPORT: 表示网关状态上报。
 * • DEVICE_BINDING: 设备绑定相关的命令。
 * 
 */
public enum CommandType {

    PING((byte) 0x90, "Ping包"),
    TIME_SYNC((byte) 0x91, "授时包"),
    REMOTE_COMMAND((byte) 0xA8, "远程指令"),
    STATUS_REPORT((byte) 0x92, "网关状态上报"),
    DEVICE_BINDING((byte) 0x93, "设备绑定"),
    NAME_REPORT((byte) 0xAE, "名称上报"),
    DELETE_BINDINGS((byte) 0x97, "删除所有绑定"),
    LOCK_DATA((byte) 0x94, "电子锁数据"),
    SERVER_TIME_FEEDBACK((byte) 0x9F, "服务器时间反馈");

    private final byte code;
    private final String description;

    CommandType(byte code, String description) {
        this.code = code;
        this.description = description;
    }

    public byte getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    // 根据命令码获取对应的命令类型
    public static CommandType fromCode(byte code) {
        for (CommandType type : CommandType.values()) {
            if (type.getCode() == code) {
                return type;
            }
        }
        throw new IllegalArgumentException("未知的命令类型: " + String.format("%02X", code));
    }
}